package com.wuyuan.xy.task;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alibaba.fastjson2.JSONObject;
import com.wuyuan.xy.interceptor.HttpClientUtil;
import org.apache.http.util.Asserts;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import com.wuyuan.xy.controller.GenerateSms;

import java.time.LocalTime;
import java.time.temporal.ChronoUnit;
import java.util.HashMap;
import java.util.Map;
import java.time.Duration;

@Component
public class MesWaringTask {
    private final static Logger logger = LoggerFactory.getLogger(MesWaringTask.class);
    public static int transCount = 0;
    public static LocalTime sendsmsTime1=null;
    public static LocalTime sendsmsTime2;
    public  static int sendFlag =0;
  @Autowired
    GenerateSms sms;
    @Value("${xy.cehuisslurl}")
    private String cehuisslurl;
    @Value("${xy.phones}")
    private String phones;
    @Value("${xy.tcount}")
    private int tcount;

    @Scheduled(cron = "${xyScheduled.myCron}")
    public void checkConnectionFailed() {
        //  System.out.println("world");
        checkConn();//检查连接，连接5次仍然失败，发送短信（0:30到4:00不发送短信）
        if(transCount >tcount) {
            //  System.out.println("重连超时了，50秒没有反应，请检查服务器");
            logger.info("象屿服务器重连超时，50秒没有反应，请检查服务器。查看后台或数据库是否出错。");
            LocalTime now = LocalTime.now();

            LocalTime start = LocalTime.of(0, 00);//0:00
            LocalTime end = LocalTime.of(6, 00);//4点整
            boolean isBetween = !now.isBefore(start) && now.isBefore(end);
            if (isBetween) {//在0:30到4点之间什么也不执行
                logger.info("象屿服务器重连超时，50秒没有反应，00:00到6:00不发送短信。");
            } else {
                logger.info("象屿服务器重连超时，50秒没有反应，请检查服务器。查看后台或数据库是否出错。");
                //记录一下发短信的时间
                //这里还要有个判断，比如过半个小时发一次短信，不要一直发送。
                //定义一个静态时间变量。两次发短信的间隔为半个小时。要不然手机该炸了。50秒一个短信。
                LocalTime firstSendMess = LocalTime.now();


                if(sendFlag == 0 ){
                    logger.info("象屿服务器重连超时，50秒没有反应，请检查服务器。查看后台或数据库是否出错。发送第一次短信！");
                    sms.smsPhone(phones);
                    sendsmsTime1 = firstSendMess;
                    sendsmsTime2 = sendsmsTime1.plusHours(2);//每2小时发一次
                    //sendsmsTime2 = sendsmsTime1.plusMinutes(1);//每2分钟发一次
                    sendFlag = 1;
                }
                LocalTime twoSendMess = LocalTime.now();
                if((twoSendMess.isAfter(sendsmsTime2)) && (sendFlag==1)){
                    sms.smsPhone(phones);//再发送一次短信
                    sendsmsTime1 = sendsmsTime2;
                    sendsmsTime2 = sendsmsTime1.plusHours(2);
                    //sendsmsTime2 = sendsmsTime1.plusMinutes(1);
                    sendFlag = 1;
                    logger.info("象屿服务器重连超时了，2小时没有反应，请检查服务器。查看后台或数据库是否出错。发送第二次短信！");
                }
            }
        }
    }

    public int checkConn(){
        logger.info("检查与后台服务连接情况开始，并查看后台或数据库是否出错。");
        JSONObject jsonParams = new JSONObject();
        jsonParams.put("code", "23000000000000");
        String jss = jsonParams.toString();

        String url = cehuisslurl + "/xysy/chxySync/api/msgwaring";
        JSONObject jsonObject = null;
        String ss = HttpClientUtil.doPostJsonStringParm(url, jss, null);

        if (ss == null) {
            transCount++;
            // System.out.println("重连次数："+transCount);
            logger.info("重连次数："+transCount);
        } else {
            jsonObject=JSONObject.parseObject(ss, null);
            if(jsonObject.getString("code").equals("200")){
                transCount = 0;
                sendFlag = 0;
                logger.info("连接成功。");
            }else{
                transCount++;
                logger.info("重连次数："+transCount);
            }
        }
        return transCount;
    }

//    每隔5秒钟执行一次	*/5 * * * * ?
//    每隔1分钟执行一次	0 * /1 * * * ?
//    每天1点执行一次	0 0 1 * * ?
//    每天23点55分执行一次 　	0 55 23 * * ？
//    每月最后一天23点执行一次	0 0 23 L * ？
//    每周六8点执行一次	0 0 8 ? * L
//    每月最后一个周五，每隔2小时执行一次 　	0 0 */2 ? * 6L
//    每月的第三个星期五上午10:15执行一次	0 15 10 ? * 5#3
//    在每天下午2点到下午2:05期间的每1分钟执行	0 0-5 14 * * ?
//    表示周一到周五每天上午10:15执行 　	0 15 10 ? * 2-6
//    每个月的最后一个星期五上午10:15执行	0 15 10 ? * 6L
//    每天上午10点，下午2点，4点执行一次	0 0 10,14,16 * * ?
//    朝九晚五工作时间内每半小时执行一次	0 0/30 9-17 * * ?
//    每个星期三中午12点执行一次 　	0 0 12 ? * 4
//    每年三月的星期三的下午2:10和2:44各执行一次	0 10,44 14 ? 3 4　
//    每月的第三个星期五上午10:15执行一次	0 15 10 ? * 6#3
//    每月一日凌晨2点30执行一次	0 30 2 1 * ?
//    每分钟的第10秒与第20秒都会执行	10,20 * * * * ?
//    每月的第2个星期的周5，凌晨执行	0 0 0 ? * 6#2


}
